const redisClient = require('../utils/redisClient');
const {setIncrementCounter} = require("../service/interactionServer");
const {meterTypes} = require("./meterMode");


// 验重
async function ismonitorID( monitorID ) {
    return await redisClient.hExists('ai_value', monitorID);
}


//  设置  表 - 详细 量程等 属性
async function setMeterStats( monitorID, stats){
    try {
        await redisClient.hSet('stats', monitorID, stats);
    } catch (err) {
        console.error('[ERROR] Failed to set type', err);
    }
}






// 设置默认 ai_value 表
async function setAiValueForMonitor(monitorID) {
    try {
        // 检查 monitorID 是否存在于 'ai_value' 哈希表中
        const exists = await redisClient.hExists('ai_value', monitorID); // 使用 hExists 检查键是否存在

        if (!exists) {
            // 如果不存在，则设置默认值为 0
            await redisClient.hSet('ai_value', monitorID, 0);
        }

    } catch (err) {
        console.error('[ERROR] redis中为id设置失败', err);
    }
}

// 获取 ai_value 表
async function getAiValueForMonitor(monitorID , username) {
    try {
        // 添加计费
        await setIncrementCounter(username)

        return await redisClient.hGet('ai_value', monitorID);
    } catch (err) {
        console.error('[ERROR] Failed to get ai_value for monitorID', err);
        return null;
    }
}


// 设置图片地址
async function setImage(monitorID) {
    try {
        // 检查 monitorID 是否存在于 'ai_value' 哈希表中
        const exists = await redisClient.hExists('Image', monitorID); // 使用 hExists 检查键是否存在

        if (!exists) {
            // 如果不存在，则设置默认值为 0
            await redisClient.hSet('Image', monitorID, "No upload");
        }

    } catch (err) {
        console.error('[ERROR] redis中为id设置失败', err);
    }
}

// 获取图片地址
async function getImage(monitorID) {
    try {
        return await redisClient.hGet('Image', monitorID);
    } catch (err) {
        console.error('[ERROR] Failed to get ai_value for monitorID', err);
        return null;
    }
}



// 设置类型【monitorID:type】
async function setType(monitorID, type) {
    try {
        await redisClient.hSet('type', monitorID, type);
    } catch (err) {
        console.error('[ERROR] Failed to set type', err);
    }
}




// 初始化表类型与 AI 模型的映射关系
async function initializeTypeAiModelMapping(typeAiMapping = meterTypes) {
    try {
        const promises = Object.entries(typeAiMapping).map(([type, aiModel]) =>
            redisClient.hSet('aiModel', type, aiModel)
        );

        await Promise.all(promises);
    } catch (err) {
    }
}

// 获取所有表类型的名称
const getMeterTypes = () => {
    return Object.keys(meterTypes);
};











module.exports = {
    setMeterStats,
    setType,
    getImage,
    setImage,
    ismonitorID,
    setAiValueForMonitor,
    getAiValueForMonitor,
    initializeTypeAiModelMapping,
};
